package com.example.canatest.config;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.*;

/**
 * @author chen.qian
 * @date 2018/3/19
 */
@CanalEventListener
public class MyEventListener {

/*
    //监听 当发生 添加 的时候  引发监听器
    @InsertListenPoint
    public void onEvent(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        rowData.getAfterColumnsList().forEach((c) -> System.err.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }

    //监听 当发生 修改 的时候  引发监听器
    @UpdateListenPoint
    public void onEvent1(CanalEntry.RowData rowData) {
        System.err.println("UpdateListenPoint");
        rowData.getAfterColumnsList().forEach((c) -> System.err.println("By--Annotation: " + c.getName() + " ::   " + c.getValue()));
    }

    //监听 当发生 删除 的时候  引发监听器
    @DeleteListenPoint
    public void onEvent3(CanalEntry.EventType eventType) {
        System.err.println("DeleteListenPoint");
    }
*/

    //监听 当发生 自定义 的时候  引发监听器
    //监听:当DB生成自定义变化时
    //destination : canal服务器名称
    //schema : DB数据库名称
    //table : DB数据库中的表的名称
    //eventType : 根据动作例如 删除 添加 修改 等待..  DSL语句 + DDL语句 + DCL语句 = SQL语句
    @ListenPoint(
            destination = "example",
            schema = "gmall_product",
            table = {"sku_info", "base_trademark"},
            eventType = {CanalEntry.EventType.UPDATE,
                        CanalEntry.EventType.INSERT,
                        CanalEntry.EventType.DELETE})
    public void onEvent4(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        System.out.println("Canal监听到了数据 : 数据如下 : ");
        rowData.getAfterColumnsList().forEach((c) -> {
            //c相当于Map   数据库中的某一个字段 修改过了  就会更新整行数据  属性为k 值为v 不会只单单更新修改的某一个数据
            System.out.println("K:" + c.getName() + "::::V: " + c.getValue());
        });
    }
}
